From ae9820b4b04e7c0896aca3d74f375441388f3cc4 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Mon, 6 Jul 2009 11:46:22 +0100 Subject: [PATCH] x86: Process only pending timers in acpi idle handler, not all softirqs. This fixes a bug where bailing into SCHEDULE_SOFTIRQ may not actually return. From: Ke Yu Signed-off-by: Keir Fraser --- xen/arch/x86/acpi/cpu_idle.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/xen/arch/x86/acpi/cpu_idle.c b/xen/arch/x86/acpi/cpu_idle.c index 4d591c857e..98d642f975 100644 --- a/xen/arch/x86/acpi/cpu_idle.c +++ b/xen/arch/x86/acpi/cpu_idle.c @@ -225,13 +225,8 @@ static void acpi_processor_idle(void) cpufreq_dbs_timer_suspend(); sched_tick_suspend(); - /* - * sched_tick_suspend may raise TIMER_SOFTIRQ by __stop_timer, - * which will break the later assumption of no sofirq pending, - * so add do_softirq - */ - if ( softirq_pending(smp_processor_id()) ) - do_softirq(); + /* sched_tick_suspend() can raise TIMER_SOFTIRQ. Process it now. */ + process_pending_timers(); /* * Interrupts must be disabled during bus mastering calculations and -- 2.30.2